//=======================================Copyright(c)===========================================
// 								  深圳易马达科技有限公司
//---------------------------------------文件信息----------------------------------------------
//文件名   	: CommCtrl.c
//创建人  	: Handry
//创建日期	: 
//描述	    : 通信控制代码
//-----------------------------------------------当前版本修订----------------------------------
//修改人   	:
//版本	    :
//修改日期	:
//描述	    :
//=============================================================================================

//=============================================================================================
//包含头文件
//=============================================================================================
#include "CommCtrl.h"
#include "Comm.h"

//=============================================================================================
//全局变量
//=============================================================================================
u16 gNVMPermitCmd = 0;						//可操作配置寄存器标志位
u16 gUserPermitCmd = 0;						//用户命令使能标志
u16 gReSetCmd = 0;							//复位命令
u8  gModVoltTestCmd = 0;                    //更改第二节电压标志

t_MBREG_CTRL gMBCtrl;                       //运行控制结构体

//=============================================================================================
//定义接口函数
//=============================================================================================

//=============================================================================================
//函数名称	: void CommCtrlIsDchgEnable(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，打开放电管
//注    意	:
//=============================================================================================
u8 CommCtrlIsDchgEnable(void)
{
    return (gMBCtrl.ctrl&CTRL1_DSG_MASK) !=0;
}

//=============================================================================================
//函数名称	: void CommCtrlIsChgEnable(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，打开充电管
//注    意	:
//=============================================================================================
u8 CommCtrlIsChgEnable(void)
{
    return (gMBCtrl.ctrl&CTRL1_CHG_MASK) !=0;
}

//=============================================================================================
//函数名称	: void CommCtrlIsPreDchgEnable(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，打开预放电管
//注    意	:
//=============================================================================================
u8 CommCtrlIsPreDchgEnable(void)
{
    return (gMBCtrl.ctrl&CTRL1_PDS_MASK) !=0;
}

//=============================================================================================
//函数名称	: void CommCtrlIsSleepMode(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，进入浅度睡眠模式
//注    意	:
//=============================================================================================
u8 CommCtrlIsSleepMode(void)
{
    return (gMBCtrl.ctrl&CTRL1_LOP_MASK) !=0;
}

//=============================================================================================
//函数名称	: void CommCtrlIsShDnMode(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，进入关机模式
//注    意	:
//=============================================================================================
u8 CommCtrlIsShDnMode(void)
{
    return (gMBCtrl.ctrl&CTRL1_SDP_MASK) !=0;
}

//=============================================================================================
//函数名称	: void CommCtrlIsChargerPlugIn(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，充电枪插入
//注    意	:
//=============================================================================================
u8 CommCtrlIsChargerPlugIn(void)
{
    return (gMBCtrl.ctrl&CTRL1_CPI_MASK) !=0;
}

//=============================================================================================
//函数名称	: void CommCtrlIsBalanceTestMode(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否接收控制，进入均衡调试模式
//注    意	:
//=============================================================================================
u8 CommCtrlIsBalanceTestMode(void)
{
    return (gMBCtrl.ctrl&CTRL1_ENBLAT_MASK)!=0;
}

//=============================================================================================
//函数名称	: void CommCtrlClearCtrl(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 清除通信控制
//注    意	:
//=============================================================================================
void CommCtrlClearCtrl(void)
{
    gMBCtrl.ctrl = 0;
    gCommPoll.recflag = 0;
}

//=============================================================================================
//函数名称	: void CommCtrlDisable(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 禁止通信处理
//注    意	:
//=============================================================================================
void CommCtrlDisable(void)
{
    gNVMPermitCmd = 0;						//可操作配置寄存器标志位
    gUserPermitCmd = 0;						//用户命令使能标志
}

//=============================================================================================
//函数名称	: void CommCtrlIsPollRec(void)
//函数参数	: void
//输出参数	: void
//静态变量	: void
//功    能	: 是否有通信接收，1：有NFC通信；0：无NFC通信
//注    意	:
//=============================================================================================
u8 CommCtrlIsPollRec(void)
{
    return gCommPoll.recflag == 1;
}

#ifdef USER_MOD_HARD_VER_ENABLE
//=============================================================================================
//函数名称	: u32 Crc32_Calc(u32 crc,u8 *buffer, u32 size)  
//函数参数	: crc:要计算的crc buffer：要计算的buffer size：计算的长度
//输出参数	: void
//静态变量	: void
//功    能	: compute the crc32 code for buffer 计算CRC32
//注    意	:
//=============================================================================================
u32 Crc32_Calc(u32 crc,u8 *buffer, u32 size)  
{  
    u32 crc_table[256];  
    u32 c;  
    u32 i, j;  
      
    for (i = 0; i < 256; i++) 
	{  
        c = (u32)i;  
        for (j = 0; j < 8; j++) 
		{  
            if (c & 1)  
                c = 0xedb88320L ^ (c >> 1);  
            else  
                c = c >> 1;  
        }  
        crc_table[i] = c;  
    }  
    
    for (i = 0; i < size; i++) 
    {  
        crc = crc_table[(crc ^ buffer[i]) & 0xff] ^ (crc >> 8);  
    }  
    return crc ;  
}
#endif

/*****************************************end of CommCtrl.c*****************************************/
